package rohyunji.oop;

import java.util.Scanner;

public class J32_exception {

	/*
	 * 예외처리 오류처리는 프로그래밍 언어의 중요한 기능
	 * 
	 * 몰래 섞여 들어오는 버그를 방지할수 있음 일부 언어에서는 발생가능한 모든오류를 미리 감지하기 위해 강제로 다중 if문을 사용
	 * 이런경우 코드가 지나치게 복잡해짐 자바에서는 try문을 사용하여 보다 쉽게 오류를 감지하고 처리
	 * 
	 * 오류 : 프로그램연산의 잘못된 코드나 CPU연산의 잘못된 동작으로 발생 컴파일 오류 ,실행시간오류로 다시 분류 컴파일오류 :
	 * 잘못된문법으로 인해 발생된오류 실행시간 오류 : 잘못된 코드 사용이나 하드웨어의 오동작으로 인한 오류 하드웨어적오류를 제외하고 모든
	 * 오류는 개발자가 적절히 제어가능 예외 : 일반적인 프로그램 실행순서를 벗어나는 것 프로그램상에서 코드에 의해 예외를 바로잡을 수
	 * 있음
	 * 
	 * 실행시간이 오류가 날것같은 코드는 일반적으로 try-catch-finally문으로 격리가능 오류가 발생하면 try 블로의 처리를
	 * 중단하고 catch 블로으로 제어가 넘어감
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] a = new int[10];
		// a[11]=12;//잘못된 코드사용

		System.out.println("이글이보이나요?");
		try {
			System.out.println(100 / 0);
		} catch (Exception e) {
			System.out.println("0으로 나눌수 없어요");
			// e.printStackTrace();
			// e.getMessage();
		}
		System.out.println("이글이보이나요?");

		// 1-10 정수입력받아출력

		Scanner sc = new Scanner(System.in);
		System.out.println("[예외처리0.정수형 숫자만 입력받음]");
		
		System.out.println("1에서 10 사이의 숫자를 입력");
		int num = 0;
		while (true) 
		{
			try 
			{
				num = sc.nextInt();
				if (num >= 1 && num <= 10) {
					System.out.println("입력하신정수는" + num);
					break;
				} 
				else
					System.out.println("1~10사의 숫자를 입력바랍니다.");
					
			} 
			catch (Exception e) 
			{
				System.err.println("정수형 숫자적으라고");
				sc = new Scanner(System.in);
			}

		}
		
		System.out.println("\n[예외처리 1. 배열문제]");
		int[]name=new int [3];
		try{
		name[0]=1;
		name[1]=2;
		name[2]=3;
		name[3]=4;
		System.out.println(1);
		}
		catch(Exception e)
		{
			
			name=new int[4];
			System.out.println("배열크기저장초과");
			
			System.out.println("저장공간 늘려드렸습니다.");
			
		}
		
		System.out.println("\n[예외처리 2. 0으로 나누기]");
		int i=0;
		int result=0;
		int a12=0;
		int a13=0;
		
		for(i=10;i>=0;--i)
		{	try
			{
				a12=(int)(Math.random()*100);
				a13=a12/i;
				result+=a13;
					
			}
			catch(Exception e)
			{
				if(i==0)
				{	
					result+=0; a13=0;
				}
						
			}
				System.out.println("난수="+a12+" "+i+"나눔="+a13);
				System.out.println("난수나눔모든계산값="+result+"\n ");
		}
		System.out.println("--------------");
		System.out.println("0으로 나누는건 \n컴퓨터가 못하니 내가했음");
		
		
		System.out.println("\n [예외처리 3.다중예외처리]");
		try{
			System.out.println(100/0);
			char []grade=new char[3];
			grade[3]='a';
		   }
	
		catch(ArithmeticException ae)
		{
			System.err.println("0으로 나누지 못함");
		}
		catch(ArrayIndexOutOfBoundsException aiob)
		{
			System.err.println("배열범위벗어남");
		}
		catch(Exception e)
		{
			System.out.println("알수없는 오류발생");
		}
		
		int n=3;
		int b=n++;
		b=b+1;
		System.out.println();
		System.out.println(b+1);
		b=++n;
		System.out.println(b);
			
		
		
		
	}

}
